home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
mint
/
toswinsc.zoo
/
xgem.h
< prev
Wrap
C/C++ Source or Header
|
1992-10-27
|
10KB
|
274 lines
/*
* Copyright 1992 Eric R. Smith. All rights reserved.
* Redistribution is permitted only if the distribution
* is not for profit, and only if all documentation
* (including, in particular, the file "copying")
* is included in the distribution in unmodified form.
* THIS PROGRAM COMES WITH ABSOLUTELY NO WARRANTY, NOT
* EVEN THE IMPLIED WARRANTIES OF MERCHANTIBILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. USE AT YOUR OWN
* RISK.
*/
#include <gemfast.h>
#include <aesbind.h>
#include <vdibind.h>
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#ifndef UCHAR
#define UCHAR unsigned char
#endif
/* types definitions for the object library */
/* type for holding various menus */
typedef struct menu_entry {
struct menu_entry *next;
char *entry; /* string for this entry */
void (*func)(); /* function to call when selection made */
void *arg; /* argument for above function */
int keycode; /* keyboard equivalent, if any */
int state; /* initial menu state (e.g. DISABLED) */
int index; /* menu index in object tree */
} ENTRY;
typedef struct menu {
struct menu *next;
char *title;
ENTRY *contents; /* pointer to menu contents */
int width; /* max. width of any entry in the menu */
int index; /* index into object tree */
} MENU;
/* Generic window type */
typedef struct win WINDOW;
struct win {
int wi_handle; /* AES window handle */
int wi_kind; /* window gadgets */
int wi_x, wi_y,
wi_w, wi_h; /* size of window working area */
int wi_fullx, wi_fully,
wi_fullw, wi_fullh;
char *wi_title;
struct win *next; /* next window in list */
int wtype; /* type of window */
#define GENERIC_WIN 0
#define TEXT_WIN 1
#define GRAPH_WIN 2
#define OBJ_WIN 3
int flags; /* various window flags */
#define WFULLED 1
#define WICONIFIED 2 /* window is in iconified format */
int icon_slot; /* icon manager slot */
int old_wkind; /* old window gadgets before iconification */
/* Pointer to extra data for subclasses */
void *extra;
/* functions to call when something happens to the window */
void (*draw) __PROTO((WINDOW *, int x, int y, int w, int h));
void (*topped) __PROTO((WINDOW *));
void (*closed) __PROTO((WINDOW *));
void (*fulled) __PROTO((WINDOW *));
void (*sized) __PROTO((WINDOW *, int x, int y, int w, int h));
void (*moved) __PROTO((WINDOW *, int x, int y, int w, int h));
void (*arrowed) __PROTO((WINDOW *, int msg));
void (*hslid) __PROTO((WINDOW *, int hpos));
void (*vslid) __PROTO((WINDOW *, int vpos));
int (*keyinp) __PROTO((WINDOW *, int keycode, int shft ));
int (*mouseinp) __PROTO((WINDOW *, int clicks, int x, int y,
int shft, int mbuttons));
void (*iconify) __PROTO((WINDOW *, int, int, int, int, int));
void (*oldfulled) __PROTO((WINDOW *));
int (*oldmouse) __PROTO((WINDOW *, int, int, int, int, int));
int prevx, prevy, prevw, prevh;
MENU *menu; /* menu that goes with this window */
char *infostr; /* string to put in the INFO line */
};
/* Text window */
typedef struct textwin {
WINDOW *win; /* underlying WINDOW struct */
int offx, offy; /* offset of window (0, 0) position */
short maxx; /* number of characters across */
short miny; /* first 'real' line (previous lines are scrollback */
short maxy; /* number of characters down */
#define SCROLLBACK(t) ((t)->miny)
#define NROWS(t) ((t)->maxy - (t)->miny)
#define NCOLS(t) ((t)->maxx)
short cx, cy; /* current cursor position (character coord.) */
short cmaxwidth; /* max. character width */
short cheight; /* character height */
short cbase; /* distance from character baseline to top */
short cfont; /* font for characters */
short cpoints; /* size of characters in points */
short savex, savey; /* saved cursor position */
short term_flags; /* e.g. cursor on/off */
#define FINSERT 0x1000 /* insert characters */
#define FFLASH 0x2000 /* cursor is currently showing */
#define FCURS 0x4000 /* cursor enabled */
#define FWRAP 0x8000 /* wrap at end of line */
short term_cattr; /* current character attributes */
/* also foreground and background colors */
short escy1; /* first char. for ESC Y */
void (*output)(); /* output function */
UCHAR **data; /* terminal data */
short **cflag; /* flags for individual characters */
#define CBGCOL 0x000f /* background color mask */
#define CFGCOL 0x00f0 /* foreground color mask */
#define COLORS(fg, bg) (((fg) << 4) | (bg))
#define CEFFECTS 0x0f00 /* VDI output style mask */
#define CE_BOLD 0x0100
#define CE_LIGHT 0x0200
#define CE_ITALIC 0x0400
#define CE_UNDERLINE 0x0800
#define CINVERSE 0x1000 /* character is in inverse video */
#define CSELECTED 0x2000 /* character has been selected by mouse */
#define CTOUCHED 0x4000 /* character attributes have changed */
#define CDIRTY 0x8000 /* the character itself has changed */
char *dirty; /* marks whether lines need redrawing */
#define SOMEDIRTY 0x01 /* some of the line needs redrawing */
#define ALLDIRTY 0x02 /* whole line is dirty */
int fd; /* file descriptor for pseudo-tty */
int pgrp; /* process group for terminal */
int scrolled; /* number of lines to scroll before re-draw */
int nbytes; /* number of bytes written to window since
last refresh */
int draw_time; /* set to indicate how long it's been since
the last refresh */
char *prog; /* program name */
char *cmdlin; /* program command line */
char *progdir; /* program current directory */
void (*callback)(); /* call this when the capture buffer is full */
#define CAPTURESIZE 79
char captbuf[CAPTURESIZE+1];
int captsiz;
int minADE, maxADE; /* min. and max. character the font can
display */
short *cwidths; /* table of font widths */
short flashtimer; /* counter for flashing cursor */
short flashperiod; /* timer for flashing */
} TEXTWIN;
/* global variables */
extern int phys_handle, vdi_handle, gl_apid;
extern int gl_hchar, gl_wchar, gl_wbox, gl_hbox;
extern int xdesk, ydesk, wdesk, hdesk;
extern int gl_numfonts;
extern int gl_rx, gl_ry, gl_rw, gl_rh, gl_rstate;
extern int gl_screenplanes;
extern int gl_done; /* set to 1 when the user wants to exit */
extern WINDOW *gl_winlist, *gl_topwin;
extern char *about_string; /* string for the "About..." dialog box */
extern void (*about_func)(); /* function called when above is selected */
extern long gl_timer; /* if evnt_loop should time out */
extern void (*fn_timeout)(); /* called on a time out */
extern void (*fn_message)();
extern int (*fn_key)(); /* called for key presses */
extern void (*fn_mouse)(); /* called for mouse clicks */
extern void (*fn_rect)(); /* called for rectangle events */
/*
* misc. gem utility functions
*/
__EXTERN void open_vwork __PROTO((void));
__EXTERN void close_vwork __PROTO((void));
__EXTERN void init_gem __PROTO((void));
__EXTERN void exit_gem __PROTO((int));
__EXTERN void evnt_loop __PROTO((void));
__EXTERN void hide_mouse __PROTO((void));
__EXTERN void show_mouse __PROTO((void));
__EXTERN void set_clip __PROTO((int, int, int, int));
__EXTERN void reset_clip __PROTO((void));
__EXTERN int ALT __PROTO((int));
__EXTERN char *UNALT __PROTO((int));
__EXTERN void set_fillcolor __PROTO((int));
__EXTERN void set_textcolor __PROTO((int));
__EXTERN void set_texteffects __PROTO((int));
__EXTERN void set_wrmode __PROTO((int));
__EXTERN void set_font __PROTO((int, int));
__EXTERN void set_fillstyle __PROTO((int, int));
/*
* functions for dealing with menus
*/
__EXTERN MENU *create_menu __PROTO(( const char *title ));
__EXTERN void destroy_menu __PROTO(( MENU * ));
__EXTERN ENTRY *add_entry __PROTO(( MENU *, char *, void (*)(), void *,
int, int ));
__EXTERN void show_menu __PROTO(( MENU * ));
__EXTERN void hide_menu __PROTO(( void ));
__EXTERN int menu_key __PROTO(( int, int ));
__EXTERN void check_entry __PROTO(( MENU *, ENTRY * ));
__EXTERN void uncheck_entry __PROTO(( MENU *, ENTRY * ));
__EXTERN void enable_entry __PROTO(( MENU *, ENTRY * ));
__EXTERN void disable_entry __PROTO(( MENU *, ENTRY * ));